package com.xjh.basestudy.javabase.classandinterface.anonymousinnerclass2;

public class JumppingDemo {
    public static void main(String[] args) {
        //创建接口操作类的对象
        JumppingOperator jo = new JumppingOperator();
        //创建猫对象
        Jumpping c = new Cat();
        //将猫对象通过操作类对象的method方法传递到操作类中被重写的jump方法中
        jo.method(c);
        //创建狗对象
        Jumpping d = new Dog();
        //将狗对象通过操作类对象的method方法传递到操作类中被重写的jump方法中
        jo.method(d);
        System.out.println("----------");
        //接下来采用匿名内部类的方式实现猫狗跳高
        //好处：不用再创建猫类和狗类，其他没有变化
        //猫
        jo.method(new Jumpping() {//写到Ju就有提示
            @Override
            public void jump() {
                System.out.println("匿名内部类：猫跳高");
            }
        });


        //狗（使用匿名内部类）
        jo.method(new Jumpping() {
            @Override
            public void jump() {
                System.out.println("匿名内部类：狗跳高");
            }
        });
        //很重要的理解 :    ()-> { System.out.println("匿名内部类：狗跳高");}
        // 我只是这样写，lambda怎么知道lambda表达式想实现的是Jumpping这个接口，也不知道要重写的方法名是jump？
        //答案：因为jo.method这个方法参数需要的是Jumpping接口实现类对象，所以会自动对应上
        //猪 （使用lambda表达式）
        jo.method(
                () -> {
                    System.out.println("lambda表达式：猪跳高");
                }
        );

    }
}
